package com.jch.group_msg;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;

import java.text.SimpleDateFormat;
import java.util.Date;

// 群组消息，使用示例
public class DemoServerHandler extends ChannelInboundHandlerAdapter {

    // 客户端与服务器建立连接时触发
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        // 将接入的客户端通道，加入群组。
        ChannelHandler.channelGroup.add(ctx.channel());
        System.out.println("连接信息：" + ctx.channel().localAddress().toString());

        String msg = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS").format(new Date()) + " 建立连接成功！\r\n";
        ctx.writeAndFlush(msg);
    }

    // 客户端主动断开连接时触发
    @Override
    public void channelInactive(ChannelHandlerContext ctx) throws Exception {
        System.out.println("客户端断开连接：" + ctx.channel().localAddress().toString());
        // 将断开客户端从群组中移除
        ChannelHandler.channelGroup.remove(ctx.channel());
    }

    // 读取消息
    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS").format(new Date()) + " 收到消息：" + msg);
        //服务器处理后，并群发消息
        String groupMsg = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS").format(new Date()) + " 服务器收到消息->" + msg + "\r\n";
        ChannelHandler.channelGroup.writeAndFlush(groupMsg);
    }

    // 通道中出现异常时触发
    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        ctx.close(); // 关闭通道
        System.out.println("异常信息：" + cause.getMessage());
    }
}
